package com.qf.controller;

import com.qf.pojo.TestUser;
import com.qf.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 测试controller方法如何接收参数
 * @author 千锋健哥
 */
@Controller
@RequestMapping("/param")
public class TestParamController {

    /**
     * 测试接收基本数据类型参数: 包含string, Integer, Long, Double, Float, Boolean等
     * 规则: 要求参数名称必须等于传入的变量名
     * 访问路径: http://localhost:8080/param/test1?name=zhangsan&age=18
     * @return
     */
    @RequestMapping("/test1")
    public String test1(String name, Integer age) {
        System.out.println("name=" + name);
        System.out.println("age=" + age);
        //测试请求转发
        //return "forward:/hello/test";

        //测试重定向
        return "redirect:/hello/test?name=" + name;
    }

    /**
     * 测试接收实体类, 类型参数以及数组参数
     * 规则: 要求传入参数的变量名, 必须等于接收的实体类的属性名以及类型
     * 规则: 如果传入数组类型属性, 那么传入的变量名称必须等于实体类中数组属性的属性名.
     * 访问路径: http://localhost:8080/param/test2?name=zhangsan&age=18&birthday=2023-10-12
     * @return
     * 访问路径: http://localhost:8080/param/test2?name=zhangsan&age=18&birthday=2023-10-12&hobbys=lol&hobbys=chiji&hobbys=nongyao
     */
    @RequestMapping("/test2")
    public String test2(User user) {
        System.out.println(user);
        return "test1";
    }

    /**
     * 测试接收List集合类型参数
     * 规则: List集合必须放在实体类中, 传入的参数名称规则为
     *      集合属性名称[索引].集合泛型中的属性名称
     * 例如:  userList[0].name=zhangsan&userList[0].age=18
     *       &userList[1].name=lisi&userList[1].age=19
     */
    @RequestMapping("/test3")
    public String test3(TestUser testUser) {
        System.out.println(testUser);
        return "test1";
    }

    /**
     * 测试默认支持的参数类型
     * 默认支持参数包括: HttpServletRequest, HttpServletResponse, HttpSession
     * 这些参数随着自己需要可以添加删除, 任何controller方法都可以添加使用或者不使用
     * 访问路径: http://localhost:8080/param/test4?name=zhangsan&age=14
     * @param request
     * @param response
     * @param session
     * @return
     */
    @RequestMapping("/test4")
    public String test4(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        System.out.println(name);
        System.out.println(age);
        return "test1";
    }

}
